package com.thp.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 媒婆(婚姻介绍所)
 * 
 * 实现 InvocationHandler接口 就这个类就具有代理功能了
 * 
 * 代理类没有修改原有的类的内容
 * 只是在被代理对象执行方法时添加了代理对象的逻辑
 * 
 * @author Tommy
 *
 */
public class Matchmaker implements InvocationHandler {
	
	
	private Person target;  // 被代理对象的引用作为一个成员变常量保存下来了, 需要调用被代理对象的方法
	
	// 获取被代理人的个人资料
	public Object getInstance(Person target) throws Exception {
		this.target = target;
		Class clazz = target.getClass();
		// 返回一个代理对象
		// 传入被代理对象的接口,那么在调用代理对象返回时,可以强制转换成被代理对象的接口
		return Proxy.newProxyInstance(clazz.getClassLoader() , clazz.getInterfaces(), this);
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		
		System.out.println("你的性别是: " + this.target.getSex() + "给你的备选对象性别是 异性");
		System.out.println("开始进行匹配");
		System.out.println("------------------------");
		// this.target.findLove();
		// this.target.findCompare();
		System.out.println("---------------");
		for(Object obj : args) {
			System.out.println("-" + obj + "-");
		}
		System.out.println("---------------");
		// 方法的执行
		method.invoke(this.target, args);
		System.out.println("------------------------");
		System.out.println("如果合适的话,就干该干的吧...");
		return null;
	}
}
